From: Carlos Garnacho Date: Mon, 26 May 2025 15:25:16 +0000 (+0200) Subject: popupMenu: Use Clutter.Sprite for pointing focus identification X-Git-Tag: archive/raspbian/50.5-1+rpi1~1^2~104^2^2~24 X-Git-Url: https://dgit.raspbian.org/%22http://www.example.com/cgi/%22/%22http:/www.example.com/cgi/%22?a=commitdiff_plain;h=227909761a36aed4797c0c17294732d6c9b37bf7;p=gnome-shell.git popupMenu: Use Clutter.Sprite for pointing focus identification Move away from devices and sequences for this. Part-of: --- diff --git a/js/ui/popupMenu.js b/js/ui/popupMenu.js index ced8a5ae8..bd0d51f93 100644 --- a/js/ui/popupMenu.js +++ b/js/ui/popupMenu.js @@ -453,40 +453,45 @@ export const Switch = GObject.registerClass({ this._dragging = true; [this._initialGrabX] = event.get_coords(); - let device = event.get_device(); - let sequence = event.get_event_sequence(); this._grab = global.stage.grab(this); - this._grabbedDevice = device; - this._grabbedSequence = sequence; + const backend = global.stage.get_context().get_backend(); + const sprite = backend.get_sprite(global.stage, event); + this._sprite = sprite; return Clutter.EVENT_STOP; } - vfunc_motion_event() { - if (this._dragging && !this._grabbedSequence) + vfunc_motion_event(event) { + const backend = this.get_context().get_backend(); + const sprite = backend.get_sprite(global.stage, event); + + if (this._dragging && this._sprite === sprite) return this._motionEvent(this, Clutter.get_current_event()); return Clutter.EVENT_PROPAGATE; } - vfunc_button_release_event() { - if (this._dragging && !this._grabbedSequence) + vfunc_button_release_event(event) { + const backend = this.get_context().get_backend(); + const sprite = backend.get_sprite(global.stage, event); + + if (this._dragging && this._sprite === sprite) return this._endDragging(); return Clutter.EVENT_PROPAGATE; } _touchDragging(actor, event) { - let sequence = event.get_event_sequence(); + const backend = actor.get_context().get_backend(); + const sprite = backend.get_sprite(global.stage, event); if (!this._dragging && event.type() === Clutter.EventType.TOUCH_BEGIN) { this.startDragging(event); return Clutter.EVENT_STOP; - } else if (this._grabbedSequence && - sequence.get_slot() === this._grabbedSequence.get_slot()) { + } else if (this._sprite === sprite) { if (event.type() === Clutter.EventType.TOUCH_UPDATE) return this._motionEvent(this, event); else if (event.type() === Clutter.EventType.TOUCH_END) @@ -511,8 +516,7 @@ export const Switch = GObject.registerClass({ this.toggle(); this._dragged = false; - this._grabbedSequence = null; - this._grabbedDevice = null; + this._sprite = null; this._dragging = false; return Clutter.EVENT_STOP;